package es.armaplus.dao;

import java.util.Collection;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Example;

import es.armaplus.ddbb.base.Clientes;
import es.armaplus.hibernate.HibernateUtils;

public class ClientesDao extends BaseDAO{

	private final static Log log = LogFactory.getLog(ClientesDao.class);
	public Collection <Clientes> getClientes() {
		List <Clientes> clientes = null;
		
		Session session = HibernateUtils.getSessionFactory().getCurrentSession();

		String query = "from Clientes";
		clientes = session.createQuery(query).list();

		return clientes;
	}
	
	/**
	 * M�todo para obtener un cliente desde su identificador.
	 * @param idClienteInt
	 * @return
	 */
	public Clientes getCliente(int idClienteInt) {
		Clientes cliente = null;
		Session session = HibernateUtils.getSessionFactory().getCurrentSession();

		cliente = (Clientes) session.get(Clientes.class, idClienteInt);
		
		
		return cliente;
	}

	/**
	 * Método para buscar un cliente por sus campos.
	 * @param cliente
	 * @return
	 */
	public List<Clientes> getBuscarClientes(Clientes cliente) {
		Session session = HibernateUtils.getSessionFactory().getCurrentSession();
		
		
		/*
		 * Construcción de la query.
		 */
		StringBuffer sbuf = new StringBuffer();
		sbuf.append("select cli ")
				.append("from Clientes cli ")
				.append("where ")
				.append("1 = 1 ");
		
		if(cliente.getNombre() != null && !cliente.getNombre().equals("")){
			sbuf.append("and cli.nombre like :nombre ");
		}
		if(cliente.getApellido1() != null && !cliente.getApellido1().equals("")){
			sbuf.append("and apellido1 like :apellido1 " );
		}
		if(cliente.getApellido2() != null && !cliente.getApellido2().equals("")){
			sbuf.append("and apellido2 like :apellido2 " );
		}
		if(cliente.getNif() != null && !cliente.getNif().equals("")){
			sbuf.append("and nif like :nif " );
		}
		if(cliente.getTelefono1() != null && !cliente.getTelefono1().equals("")){
			sbuf.append("and (telefono1 like :telefono1 " ).
				append("or telefono2 like :telefono1) ");
		}
		
		Query query = session.createQuery(sbuf.toString());
		
		query.setProperties(cliente);
//
//		/*
//		 * Binding parametros.
//		 */
//		if(cliente.getNombre() != null && !cliente.getNombre().equals("")){
//			query.setString("nombre", cliente.getNombre());
//		}
//		if(cliente.getApellido1() != null && !cliente.getApellido1().equals("")){
//			query.setString("apellido1", cliente.getApellido1());
//		}
//		if(cliente.getApellido2() != null && !cliente.getApellido2().equals("")){
//			query.setString("apellido2", cliente.getApellido2());
//		}
//		if(cliente.getNif() != null && !cliente.getNif().equals("")){
//			query.setString("nif", cliente.getNif());
//		}
//		if(cliente.getTelefono1() != null && !cliente.getTelefono1().equals("")){
//			query.setString("telefono1", cliente.getTelefono1());
//		}
		
		List<Clientes> lista = query.list();
		log.debug("tamaño de la lista filtrada: " + lista.size());
		return lista;
	}

}
